package org.ztr.saa04streamingoutput.config;

import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatOptions;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author: ZhaoTR
 * @Date: Created in 2025/10/20 19:58
 * @Description: 配置
 * @Version: 1.0
 */
@Configuration
public class SaaLLMConfig {
    // 模型名称常量定义，一套系统多模型共存
    private final String DEEPSEEK_MODEL = "deepseek-v3";
    private final String QWEN_MODEL = "qwen-max";

    /**
     * 定义一个名为 "deepseek" 的 ChatModel Bean，用于调用 DeepSeek 模型。
     * 该模型通过 DashScope 平台提供服务，使用环境变量中的 API Key 进行认证。
     */
    @Bean(name = "deepseek")
    public ChatModel deepSeek() {
        return DashScopeChatModel.builder()
                // 配置 DashScope API 访问凭证：从环境变量 "aiQwen-apikey" 中读取 API Key
                .dashScopeApi(DashScopeApi.builder().apiKey(System.getenv("aiQwen-apikey")).build())
                // 设置默认聊天选项：指定使用的模型为 DEEPSEEK_MODEL（应在常量中定义，如 "deepseek-chat"）
                .defaultOptions(DashScopeChatOptions.builder().withModel(DEEPSEEK_MODEL).build())
                .build();
    }

    /**
     * 定义一个名为 "qwen" 的 ChatModel Bean，用于调用通义千问（Qwen）模型。
     * 同样使用 DashScope 平台，并复用同一个 API Key（通过环境变量注入）。
     */
    @Bean(name = "qwen")
    public ChatModel qwen() {
        return DashScopeChatModel.builder()
                // 使用相同的 API Key（环境变量 "aiQwen-apikey"）
                .dashScopeApi(DashScopeApi.builder().apiKey(System.getenv("aiQwen-apikey")).build())
                // 指定模型为 QWEN_MODEL（如 "qwen-max"、"qwen-plus" 等）
                .defaultOptions(DashScopeChatOptions.builder().withModel(QWEN_MODEL).build())
                .build();
    }

    /**
     * 基于 "deepseek" ChatModel 创建一个名为 "deepseekChatClient" 的 ChatClient。
     * ChatClient 是 Spring AI 提供的高级客户端，用于简化对话调用。
     *
     * @param deepseek 注入名为 "deepseek" 的 ChatModel（通过 @Qualifier 明确指定）
     * @return 配置好的 ChatClient 实例
     */
    @Bean(name = "deepseekChatClient")
    public ChatClient deepseekChatClient(@Qualifier("deepseek") ChatModel deepseek) {
        return ChatClient.builder(deepseek)
                // 可选：再次指定默认模型（通常可省略，因为底层 ChatModel 已配置）
                .defaultOptions(ChatOptions.builder().model(DEEPSEEK_MODEL).build())
                .build();
    }

    /**
     * 基于 "qwen" ChatModel 创建一个名为 "qwenChatClient" 的 ChatClient。
     *
     * @param qwen 注入名为 "qwen" 的 ChatModel
     * @return 配置好的 Qwen 专用 ChatClient
     */
    @Bean(name = "qwenChatClient")
    public ChatClient qwenChatClient(@Qualifier("qwen") ChatModel qwen) {
        return ChatClient.builder(qwen)
                // 同样可选地设置默认模型选项
                .defaultOptions(ChatOptions.builder().model(QWEN_MODEL).build())
                .build();
    }
}
